package com.example.leetcode.prcatice;

import java.util.ArrayList;
import java.util.List;

/**
 * 给你链表的头节点 head 和一个整数 k 。
 *
 * <p>交换 链表正数第 k 个节点和倒数第 k 个节点的值后，返回链表的头节点（链表 从 1 开始索引）。
 */
public class Test1721 {

    public ListNode swapNodes(ListNode head, int k) {
        ListNode pre = head;
        List<ListNode> list = new ArrayList<>();
        while (pre != null){
            list.add(pre);
            pre = pre.next;
        }
        int size = list.size();
        ListNode left = list.get(k-1);
        ListNode right = list.get(size-k);
        ListNode neeHead = new ListNode();
        ListNode tail = neeHead;
        for (int i =0;i<size;i++){
            if (i == k-1){
                tail.next = right;
                tail = right;
            }else if (i == size - k){
                tail.next = left;
                tail = left;
            }else {
                tail.next = list.get(i);
                tail = list.get(i);
            }
        }
        tail.next = null;
        return neeHead.next;
    }
}


class Demo1721{
  public static void main(String[] args) {
      ListNode list1 = new ListNode(0);
      list1.next = new ListNode(1);
      list1.next.next = new ListNode(2);
      list1.next.next.next = new ListNode(3);
      list1.next.next.next.next = new ListNode(4);
      list1.next.next.next.next.next = new ListNode(5);
      Test1721 t = new Test1721();
      ListNode listNode = t.swapNodes(list1, 1);
      while (listNode != null){
        System.out.println("val="+listNode.val);
        listNode = listNode.next;
      }
//
//      List<Integer> list = new ArrayList<>();
//      list.add(1);
//      list.add(2);
//      list.add(3);
//      list.add(0,2);
//      list.add(1,1);
//      System.out.println(list.get(0)+","+list.get(1)+","+list.get(2));
  }
}